package controllers

import (
	"Bok/models"
	"Bok/services"
	"fmt"
	"net/http"

	"github.com/gin-gonic/gin"
)

type UserController struct {
	articleService services.UserService
}

func NewUserController(service services.UserService) *UserController {
	return &UserController{articleService: service}
}

func (c *UserController) LoginController(ctx *gin.Context) {
	var req models.LoginInfo
	// 序列化
	if err := ctx.ShouldBindJSON(&req); err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"参数错误": err.Error()})
	}
	// 此时 拿到前端的数据了、
	// 验证 验证码

	// 验证密码（service中进行）
	data, err := c.articleService.LoginService(req)
	if err != nil {
		// 登录失败（如用户不存在、密码错误等）
		ctx.JSON(http.StatusOK, gin.H{
			"code":    401,         // 401表示未授权
			"message": err.Error(), // 直接使用服务层返回的错误信息
			"data":    nil,
		})
		return
	}
	ctx.JSON(http.StatusOK, gin.H{
		"code":    200,
		"message": "success",
		"data":    data,
	})

}

func (c *UserController) EditUserController(ctx *gin.Context) {
	var req models.EditUserRequest
	// 获取请求体
	if err := ctx.ShouldBindJSON(&req); err != nil {
		ctx.JSON(http.StatusOK, gin.H{
			"code":    1,
			"message": err.Error(),
			"data":    nil,
		})
	}
	fmt.Println("controller:", req)
	fmt.Println(ctx.Get("Username"))
	fmt.Println(ctx.Get("Id"))
	fmt.Println(ctx.Get("LoginId"))
	// 传递给 service处理
	id, exit := ctx.Get("Id")
	if exit {
		data, err := c.articleService.EditService(id.(uint), req)
		if err != nil {
			ctx.JSON(http.StatusOK, gin.H{
				"code":    401,
				"message": err.Error(),
				"data":    nil,
			})
		}
		ctx.JSON(http.StatusOK, gin.H{
			"code":    200,
			"message": "success",
			"data":    data,
		})
	}

}
